<template>
	<!-- 登录页面的背景容器 -->
	<view class="login-bg">
		<!-- 登录表单的容器 -->
		<view class="login-container">
			<!-- 显示 logo 的图片 -->
			<image class="logo" src="https://cdn.uviewui.com/uview/common/logo.png"></image>
			<!-- 欢迎登录的标题 -->
			<view class="title">欢迎登录</view>
			<!-- 登录表单，使用 u-form 组件 -->
			<u-form :model="form" class="login-form">
				<!-- 手机号输入项 -->
				<u-form-item prop="mobile">
					<!-- 手机号输入框，使用 u-input 组件 -->
					<u-input v-model="form.mobile" placeholder="请输入手机号" clearable prefixIcon="phone" type="number"
						border="surround" shape="circle" />
				</u-form-item>
				<!-- 密码输入项 -->
				<u-form-item prop="password">
					<!-- 密码输入框，使用 u-input 组件 -->
					<u-input v-model="form.password" :type="showPwd ? 'text' : 'password'" placeholder="请输入密码" clearable
						prefixIcon="lock" border="surround" shape="circle" :suffixIcon="showPwd ? 'eye' : 'eye-off'"
						@suffix-icon-click="togglePwd" />
				</u-form-item>

				<!-- 登录按钮，使用 u-button 组件 -->
				<u-button type="primary" shape="circle" @click="onLogin" :loading="loading" class="login-btn">
					登录
				</u-button>

				<!-- 忘记密码和注册账号的操作行 -->
				<view class="action-row">
					<!-- 点击可触发忘记密码操作 -->
					<view><up-text type="error" @click="onForget" text="忘记密码?"></up-text></view>
					<!-- 点击可触发注册账号操作 -->
					<view><up-text type="primary" @click="onRegister" text="注册账号"></up-text></view>
				</view>
			</u-form>
		</view>
		<!-- 用于显示提示信息的 toast 组件 -->
		<up-toast ref="uToastRef"></up-toast>
	</view>
</template>

<script setup lang="ts">
	import { onMounted, ref } from 'vue'
	// 导入登录接口
	import { loginApi } from '../../http/user';
	// 导入 onShow 生命周期钩子
	import { onShow } from '@dcloudio/uni-app'
	let app = getApp();

	// 定义登录表单的数据结构
	interface LoginForm {
		mobile : string
		password : string
	}

	// 表单数据，使用 ref 进行响应式处理
	const form = ref<LoginForm>({
		mobile: '',
		password: ''
	})

	// 引用 toast 组件
	const uToastRef = ref(null)
	// 显示 toast 提示信息的方法
	function showToast(params : any) {
		uToastRef.value.show({
			...params,
			complete() {
				// 提示信息显示完成后的回调函数，目前为空
			}
		});
	}

	// 控制密码是否显示的状态
	const showPwd = ref(false)
	// 控制登录按钮加载状态的变量
	const loading = ref(false)

	// 判断是否已登录
	const checkLogin = () => {
		// 从本地存储中获取 accessToken
		const token = uni.getStorageSync('accessToken')
		if (token) {
			// 如果已登录，重新跳转到首页
			uni.reLaunch({
				url: '/pages/home/home'
			})
		}
	}

	// 在页面显示时检查是否已登录
	onShow(() => {
		checkLogin()
	})

	// 登录验证
	const onLogin = () => {
		// 检查手机号是否为空
		if (!form.value.mobile) {
			showToast({
				"message": '请输入手机号'
			})
			return
		}
		// 检查密码是否为空
		if (!form.value.password) {
			showToast({
				"message": '请输入密码'
			})
			return
		}
		// 登录逻辑
		loginApi(form.value.mobile, form.value.password).then(data => {
			let auth = {
				userId: data.id,
				messageType: 'Student_Auth'
			}
			app.$ws.send(auth)

			// 将 accessToken 和 tokenType 存储到本地存储中
			uni.setStorageSync('accessToken', data.accessToken)
			uni.setStorageSync('tokenType', data.tokenType)
			// 本地存储手机号
			uni.setStorageSync('username', data.username)
			console.log(data);
			// 登录成功后，重新跳转到首页
			uni.reLaunch({
				url: '/pages/home/home'
			})
		})
	}

	// 忘记密码的处理方法
	const onForget = () => {
		showToast({
			"message": '请联系管理员找回密码'
		})
	}

	// 注册账号的处理方法
	const onRegister = () => {
		showToast({
			"message": '请联系管理员申请'
		})
	}

	// 密码显示切换
	const togglePwd = () => {
		// 切换密码显示状态
		showPwd.value = !showPwd.value
	}
</script>

<style lang="scss" scoped>
	.login-bg {
		// 最小高度为整个视口高度
		min-height: 100vh;
		// 宽度为整个视口宽度
		width: 100vw;
		// 背景渐变效果
		background: linear-gradient(135deg, #e0eafc 0%, #cfdef3 100%);
		// 使用 flex 布局，水平和垂直居中
		display: flex;
		justify-content: center;
		align-items: center;
	}

	.login-container {
		// 背景颜色为白色
		background: #fff;
		// 圆角边框
		border-radius: 24rpx;
		// 阴影效果
		box-shadow: 0 8rpx 32rpx rgba(180, 200, 220, 0.2);
		// 内边距
		padding: 60rpx 40rpx 48rpx 40rpx;
		// 使用 flex 布局，垂直排列子元素
		display: flex;
		flex-direction: column;
		// 子元素水平居中
		align-items: center;
		// 最小宽度
		min-width: 600rpx;
	}

	.logo {
		// logo 的宽度
		width: 120rpx;
		// logo 的高度
		height: 120rpx;
		// 圆形边框
		border-radius: 50%;
		// 底部外边距
		margin-bottom: 30rpx;
		// 阴影效果
		box-shadow: 0 4px 24px #b3c0d1;
	}

	.title {
		// 标题字体大小
		font-size: 38rpx;
		// 字体加粗
		font-weight: bold;
		// 底部外边距
		margin-bottom: 50rpx;
		// 字体颜色
		color: #333;
		// 字母间距
		letter-spacing: 2rpx;
	}

	.login-form {
		// 表单宽度为 100%
		width: 100%;
	}

	.u-form-item {
		// 表单项底部外边距
		margin-bottom: 24rpx;
	}

	.action-row {
		// 使用 flex 布局，两端对齐
		display: flex;
		justify-content: space-between;
		// 上下外边距
		margin: 20rpx 0 40rpx;
		// 宽度为 100%
		width: 100%;
		// 顶部内边距
		padding-top: 20px;
	}

	.login-btn {
		// 按钮宽度为 100%
		width: 100%;
		// 顶部外边距
		margin-top: 20rpx;
		// 字体大小
		font-size: 32rpx;
	}
</style>